package com.mysoftbase.base.holder;

import lombok.extern.slf4j.Slf4j;

/**
 * @Author: JohnCoding
 * @Description: 动态数据源控制类holder
 * @date: 2019/12/26 11:31
 */
@Slf4j
public class DynamicDataSourceContextHolder {

    /**
     * 使用ThreadLocal维护变量，ThreadLocal为每个使用该变量的线程提供独立的变量副本，
     *  所以每一个线程都可以独立地改变自己的副本，而不会影响其它线程所对应的副本。
     */
    private static final ThreadLocal<String> nowDataSource = new ThreadLocal<>();

    /**
     * 设置本地线程值
     * @param dataSource
     */
    public static void setNowDataSource(String dataSource){
        log.info("切换到{}数据源",dataSource);
        nowDataSource.set(dataSource);
    }

    /**
     * 获取本地线程值
     * @return
     */
    public static String getNowDataSource(){
        return nowDataSource.get();
    }

    /**
     * 清空本地线程值
     */
    public static void removeNowDataSource(){
        nowDataSource.remove();
    }

}
